// This file is part of OpenMeca, an easy software to do mechanical simulation.
//
// Author(s)    :  - Damien ANDRE  <openmeca@gmail.com>
//
// Copyright (C) 2012 Damien ANDRE
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#ifndef OpenMeca_Core_AutomaticItem_hpp
#define OpenMeca_Core_AutomaticItem_hpp

#include <string>
#include <QIcon>
#include <QTreeWidgetItem>

#include "OpenMeca/Core/Item.hpp"
#include "OpenMeca/Core/SetOf.hpp"
#include "OpenMeca/Core/AutoRegister.hpp"


namespace OpenMeca
{

  namespace Core
  {
    
    class AutomaticItem : public Item, public AutoRegister<AutomaticItem>
    {
    public:    
      AutomaticItem(const std::string strType);
      virtual ~AutomaticItem();
      
      virtual const std::string& GetName() const = 0;
      virtual std::string& GetName() = 0;
      
      virtual void Update();

      QIcon& GetIcon();
      const QIcon& GetIcon() const;
    
    protected:
      virtual void UpdateIcon() = 0;
      virtual QTreeWidgetItem& GetParentTreeItem() = 0;


    private :
      QIcon icon_;
      QTreeWidgetItem* treeItem_;
      
    private :
      AutomaticItem();                            //Not Allowed
      AutomaticItem(const AutomaticItem&);             //Not Allowed
      AutomaticItem& operator=(const AutomaticItem&);  //Not Allowed
    }; 
    

  }
}


#endif
